package org.eddycar.jproyeddycar.contrato.negocio;

import java.util.ArrayList;
import java.util.List;
import javax.persistence.NoResultException;
import org.eddycar.jproyeddycar.contrato.dao.DaoClase;
import org.eddycar.jproyeddycar.contrato.dao.DaoMarca;
import org.eddycar.jproyeddycar.contrato.dao.DaoTipo;
import org.eddycar.jproyeddycar.contrato.dao.DaoVehiculo;
import org.eddycar.jproyeddycar.contrato.modelo.Clase;
import org.eddycar.jproyeddycar.contrato.modelo.Marca;
import org.eddycar.jproyeddycar.contrato.modelo.Modificacion;
import org.eddycar.jproyeddycar.contrato.modelo.Tipo;
import org.eddycar.jproyeddycar.contrato.modelo.Vehiculo;

public class AdministrarVehiculoUCC {

    private DaoVehiculo vehiculoDao = new DaoVehiculo();
    private DaoMarca marcaDao = new DaoMarca();
    private DaoTipo tipoDao = new DaoTipo();
    private DaoClase claseDao = new DaoClase();
    private Vehiculo vehiculo = new Vehiculo();
    private Modificacion modificacion = new Modificacion();
    private List<Modificacion> modificaciones = new ArrayList();

    public AdministrarVehiculoUCC() {
    }

    public List<Vehiculo> buscar(String criterio) {
        return vehiculoDao.buscarCriterio(criterio);
    }

    public boolean guardar(Vehiculo doc) {
        boolean guardar = false;
//        try {
            vehiculoDao.guardar(doc);
            guardar = true;
//        } catch (Exception e) {
//            
//        }
        return guardar;
    }

    public boolean guardarMarca(Marca doc) {
        boolean guardar = false;
        try {
            marcaDao.guardar(doc);
            guardar = true;

        } catch (NullPointerException e) {
            marcaDao.guardar(doc);
            guardar = true;
        } catch (IllegalArgumentException e) {
            marcaDao.guardar(doc);
            guardar = true;
        }
        return guardar;
    }

    public boolean guardarClase(Clase doc) {
        boolean guardar = false;
        try {
            claseDao.guardar(doc);
            guardar = true;

        } catch (NullPointerException e) {
            claseDao.guardar(doc);
            guardar = true;
        } catch (IllegalArgumentException e) {
            claseDao.guardar(doc);
            guardar = true;
        }
        return guardar;
    }

    public boolean guardarTipo(Tipo doc) {
        boolean guardar = false;
        try {
            tipoDao.guardar(doc);
            guardar = true;

        } catch (NullPointerException e) {
            tipoDao.guardar(doc);
            guardar = true;
        } catch (IllegalArgumentException e) {
            tipoDao.guardar(doc);
            guardar = true;
        }
        return guardar;
    }

    public boolean actualizar(Vehiculo vehiculo) {
        boolean actualizar = true;
        System.out.println(vehiculo.getModificaciones().size());
        vehiculoDao.actualizar(vehiculo);
        return actualizar;
    }

    public boolean existe(Vehiculo vehiculo) {
        boolean existe = false;
        for (Vehiculo doc : this.vehiculoDao.buscarTodos()) {
            if (doc.getPlaca().equals(vehiculo.getPlaca())) {
                existe = true;
            }
        }
        return existe;
    }

    public boolean existeMarca(String criterio) {
        boolean existe = false;
        try {
            marcaDao.buscarNombreMarca(criterio);
            existe = true;
        } catch (NoResultException e) {
        }
        return existe;
    }

    public boolean existeTipo(String criterio) {
        boolean existe = false;
        try {
            tipoDao.buscarNombreTipo(criterio);
            existe = true;
        } catch (NoResultException e) {
        }
        return existe;
    }

    public boolean existeClase(String criterio) {
        boolean existe = false;
        try {
            claseDao.buscarNombreClase(criterio);
            existe = true;
        } catch (NoResultException e) {
        }
        return existe;
    }

    public List<Modificacion> getModificaciones() {
        return modificaciones;
    }

    public void setModificaciones(List<Modificacion> modificaciones) {
        this.modificaciones = modificaciones;
    }

    public Vehiculo getVehiculo() {
        return vehiculo;
    }

    public void setVehiculo(Vehiculo vehiculo) {
        this.vehiculo = vehiculo;
    }

    public DaoVehiculo getVehiculoDao() {
        return vehiculoDao;
    }

    public void setVehiculoDao(DaoVehiculo vehiculoDao) {
        this.vehiculoDao = vehiculoDao;
    }

    public DaoClase getClaseDao() {
        return claseDao;
    }

    public void setClaseDao(DaoClase claseDao) {
        this.claseDao = claseDao;
    }

    public DaoMarca getMarcaDao() {
        return marcaDao;
    }

    public void setMarcaDao(DaoMarca marcaDao) {
        this.marcaDao = marcaDao;
    }

    public DaoTipo getTipoDao() {
        return tipoDao;
    }

    public void setTipoDao(DaoTipo tipoDao) {
        this.tipoDao = tipoDao;
    }

    public Modificacion getModificacion() {
        return modificacion;
    }

    public void setModificacion(Modificacion modificacion) {
        this.modificacion = modificacion;
    }
    
}
